#e
#Title[HuȂuL̂ -Hard-v]
#Text[]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main {
	let name	= "HuȂuL̂ -Hard-v";
	let imgRumia=GetCurrentScriptDirectory~"img\ExRumia.png";
	let speed 	= 6;
        let obj 	= Obj_Create(OBJ_SHOT);
        let obj2 	= Obj_Create(OBJ_SHOT);
        let obj3 	= Obj_Create(OBJ_SHOT);
        let obj4 	= Obj_Create(OBJ_SHOT);
        let obj5 	= Obj_Create(OBJ_SHOT);
        let obj6 	= Obj_Create(OBJ_SHOT);
        let obj7 	= Obj_Create(OBJ_SHOT);
	let graphic	= RED02;
	let graphic2	= ORANGE02;
	let graphic3	= YELLOW02;
	let graphic4	= GREEN02;
	let graphic5	= AQUA02;
	let graphic6	= BLUE02;
	let graphic7	= PURPLE02;

	let wIni = 120;
	
	///////////////////////////////////////////////////////////

	@Initialize{
        CutIn(YOUMU, name, "", 0, 0, 0, 0);
	LoadGraphic(imgRumia);
	    
        SetMovePosition02(GetCenterX(), GetClipMinY + 120, wIni);
        SetLife(6000);
        SetTimer(81);
	SetScore(500000);
        SetDamageRate(100, 20);
	SetInvincibility( 260 );

	TMain();
	TBuriki();
	TSub();

	}
		
	@MainLoop{
	    SetCollisionA(GetX, GetY, 32);
	    SetCollisionB(GetX, GetY, 16);

	    yield;
	}
	
	@DrawLoop{
	    SetTexture(imgRumia);
	    DrawGraphic(GetX(), GetY());
	    if(GetSpeedX()==0){SetGraphicRect(64,1,127,64);}
	    else if(GetSpeedX()>0){SetGraphicRect(192,1,255,64);}
	    else if(GetSpeedX()<0){SetGraphicRect(128,1,191,64);}
	}
		
	@Finalize{
	    DeleteGraphic(imgRumia);
	}

	task TMain{

	    yield;
	    loop(wIni){ yield; }

	    
	    CreateReflectShot(GetX, GetY, speed,
                 rand(0,360), graphic, 20, 1);
	    CreateReflectShot2(GetX, GetY, speed,
                 rand(0,360), graphic2, 20, 1);
	    CreateReflectShot3(GetX, GetY, speed,
                 rand(0,360), graphic3, 20, 1);
	    CreateReflectShot4(GetX, GetY, speed,
                 rand(0,360), graphic4, 20, 1);
	    CreateReflectShot5(GetX, GetY, speed,
                 rand(0,360), graphic5, 20, 1);
	    CreateReflectShot6(GetX, GetY, speed,
                 rand(0,360), graphic6, 20, 1);
	    CreateReflectShot7(GetX, GetY, speed,
                 rand(0,360), graphic7, 20, 1);
	}

	task TBuriki{

	if(Obj_BeDeleted(obj) == false){

	loop{

	loop(200){ yield; }
	loop(500){
	speed-= 0.012;
	Obj_SetSpeed(obj, speed);
	Obj_SetSpeed(obj2, speed);
	Obj_SetSpeed(obj3, speed);
	Obj_SetSpeed(obj4, speed);
	Obj_SetSpeed(obj5, speed);
	Obj_SetSpeed(obj6, speed);
	Obj_SetSpeed(obj7, speed);
	loop(1){ yield; }
	}


        ObjShot_SetGraphic(obj, WHITE02);
        ObjShot_SetGraphic(obj2, WHITE02);
        ObjShot_SetGraphic(obj3, WHITE02);
        ObjShot_SetGraphic(obj4, WHITE02);
        ObjShot_SetGraphic(obj5, WHITE02);
        ObjShot_SetGraphic(obj6, WHITE02);
        ObjShot_SetGraphic(obj7, WHITE02);

	loop(75){
	    CreateShot01(Obj_GetX(obj),Obj_GetY(obj),3,rand(0,360),RED01,20);
	    CreateShot01(Obj_GetX(obj2),Obj_GetY(obj2),3,rand(0,360),ORANGE01,20);
	    CreateShot01(Obj_GetX(obj3),Obj_GetY(obj3),3,rand(0,360),YELLOW01,20);
	    CreateShot01(Obj_GetX(obj4),Obj_GetY(obj4),3,rand(0,360),GREEN01,20);
	    CreateShot01(Obj_GetX(obj5),Obj_GetY(obj5),3,rand(0,360),AQUA01,20);
	    CreateShot01(Obj_GetX(obj6),Obj_GetY(obj6),3,rand(0,360),BLUE01,20);
	    CreateShot01(Obj_GetX(obj7),Obj_GetY(obj7),3,rand(0,360),PURPLE01,20);
	    loop(4){ yield; }
	}

	Concentration01(90);
	loop(100){ yield; }
	Explosion01(GetX,GetY,10,1,20);
	loop(20){ yield; }
	speed	= 6;
	Obj_SetSpeed(obj, speed);
	Obj_SetSpeed(obj2, speed);
	Obj_SetSpeed(obj3, speed);
	Obj_SetSpeed(obj4, speed);
	Obj_SetSpeed(obj5, speed);
	Obj_SetSpeed(obj6, speed);
	Obj_SetSpeed(obj7, speed);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetGraphic(obj2, graphic2);
        ObjShot_SetGraphic(obj3, graphic3);
        ObjShot_SetGraphic(obj4, graphic4);
        ObjShot_SetGraphic(obj5, graphic5);
        ObjShot_SetGraphic(obj6, graphic6);
        ObjShot_SetGraphic(obj7, graphic7);
	}
	}
	}


	///////////////////////////////////////////////////////////

   task CreateReflectShot(let x, let y, speed,
                 let angle, graphic, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj, x, y);
        Obj_SetSpeed(obj, speed);
        Obj_SetAngle(obj, angle);
        ObjShot_SetGraphic(obj, graphic);
        ObjShot_SetDelay(obj, delay);
	ObjShot_SetBombResist(obj, true);
        

        while(!Obj_BeDeleted(obj)) {
            //[
            if(Obj_GetX(obj)<GetClipMinX){
                Obj_SetX(obj, GetClipMinX*2 - Obj_GetX(obj));
                Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
            }
            //E[
            if(Obj_GetX(obj)>GetClipMaxX){
                Obj_SetX(obj, GetClipMaxX*2 - Obj_GetX(obj));
                Obj_SetAngle(obj, 180 - Obj_GetAngle(obj));
            }
            //[
            if(Obj_GetY(obj)<GetClipMinY){
                Obj_SetY(obj, GetClipMinY*2 - Obj_GetY(obj));
                Obj_SetAngle(obj, 360 - Obj_GetAngle(obj));
            }
            //[
            if(Obj_GetY(obj)>GetClipMaxY){
                Obj_SetY(obj, GetClipMaxY*2 - Obj_GetY(obj));
                Obj_SetAngle(obj, 360 - Obj_GetAngle(obj));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

   task CreateReflectShot2(let x, let y, speed,
                 let angle, graphic2, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj2, x, y);
        Obj_SetSpeed(obj2, speed);
        Obj_SetAngle(obj2, angle);
        ObjShot_SetGraphic(obj2, graphic2);
        ObjShot_SetDelay(obj2, delay);
	ObjShot_SetBombResist(obj2, true);
        

        while(!Obj_BeDeleted(obj2)) {
            //[
            if(Obj_GetX(obj2)<GetClipMinX){
                Obj_SetX(obj2, GetClipMinX*2 - Obj_GetX(obj2));
                Obj_SetAngle(obj2, 180 - Obj_GetAngle(obj2));
            }
            //E[
            if(Obj_GetX(obj2)>GetClipMaxX){
                Obj_SetX(obj2, GetClipMaxX*2 - Obj_GetX(obj2));
                Obj_SetAngle(obj2, 180 - Obj_GetAngle(obj2));
            }
            //[
            if(Obj_GetY(obj2)<GetClipMinY){
                Obj_SetY(obj2, GetClipMinY*2 - Obj_GetY(obj2));
                Obj_SetAngle(obj2, 360 - Obj_GetAngle(obj2));
            }
            //[
            if(Obj_GetY(obj2)>GetClipMaxY){
                Obj_SetY(obj2, GetClipMaxY*2 - Obj_GetY(obj2));
                Obj_SetAngle(obj2, 360 - Obj_GetAngle(obj2));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

   task CreateReflectShot3(let x, let y, speed,
                 let angle, graphic3, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj3, x, y);
        Obj_SetSpeed(obj3, speed);
        Obj_SetAngle(obj3, angle);
        ObjShot_SetGraphic(obj3, graphic3);
        ObjShot_SetDelay(obj3, delay);
	ObjShot_SetBombResist(obj3, true);
        

        while(!Obj_BeDeleted(obj3)) {
            //[
            if(Obj_GetX(obj3)<GetClipMinX){
                Obj_SetX(obj3, GetClipMinX*2 - Obj_GetX(obj3));
                Obj_SetAngle(obj3, 180 - Obj_GetAngle(obj3));
            }
            //E[
            if(Obj_GetX(obj3)>GetClipMaxX){
                Obj_SetX(obj3, GetClipMaxX*2 - Obj_GetX(obj3));
                Obj_SetAngle(obj3, 180 - Obj_GetAngle(obj3));
            }
            //[
            if(Obj_GetY(obj3)<GetClipMinY){
                Obj_SetY(obj3, GetClipMinY*2 - Obj_GetY(obj3));
                Obj_SetAngle(obj3, 360 - Obj_GetAngle(obj3));
            }
            //[
            if(Obj_GetY(obj3)>GetClipMaxY){
                Obj_SetY(obj3, GetClipMaxY*2 - Obj_GetY(obj3));
                Obj_SetAngle(obj3, 360 - Obj_GetAngle(obj3));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

   task CreateReflectShot4(let x, let y, speed,
                 let angle, graphic4, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj4, x, y);
        Obj_SetSpeed(obj4, speed);
        Obj_SetAngle(obj4, angle);
        ObjShot_SetGraphic(obj4, graphic4);
        ObjShot_SetDelay(obj4, delay);
	ObjShot_SetBombResist(obj4, true);
        

        while(!Obj_BeDeleted(obj)) {
            //[
            if(Obj_GetX(obj4)<GetClipMinX){
                Obj_SetX(obj4, GetClipMinX*2 - Obj_GetX(obj4));
                Obj_SetAngle(obj4, 180 - Obj_GetAngle(obj4));
            }
            //E[
            if(Obj_GetX(obj4)>GetClipMaxX){
                Obj_SetX(obj4, GetClipMaxX*2 - Obj_GetX(obj4));
                Obj_SetAngle(obj4, 180 - Obj_GetAngle(obj4));
            }
            //[
            if(Obj_GetY(obj4)<GetClipMinY){
                Obj_SetY(obj4, GetClipMinY*2 - Obj_GetY(obj4));
                Obj_SetAngle(obj4, 360 - Obj_GetAngle(obj4));
            }
            //[
            if(Obj_GetY(obj4)>GetClipMaxY){
                Obj_SetY(obj4, GetClipMaxY*2 - Obj_GetY(obj4));
                Obj_SetAngle(obj4, 360 - Obj_GetAngle(obj4));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

   task CreateReflectShot5(let x, let y, speed,
                 let angle, graphic5, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj5, x, y);
        Obj_SetSpeed(obj5, speed);
        Obj_SetAngle(obj5, angle);
        ObjShot_SetGraphic(obj5, graphic5);
        ObjShot_SetDelay(obj5, delay);
	ObjShot_SetBombResist(obj5, true);
        

        while(!Obj_BeDeleted(obj)) {
            //[
            if(Obj_GetX(obj5)<GetClipMinX){
                Obj_SetX(obj5, GetClipMinX*2 - Obj_GetX(obj5));
                Obj_SetAngle(obj5, 180 - Obj_GetAngle(obj5));
            }
            //E[
            if(Obj_GetX(obj5)>GetClipMaxX){
                Obj_SetX(obj5, GetClipMaxX*2 - Obj_GetX(obj5));
                Obj_SetAngle(obj5, 180 - Obj_GetAngle(obj5));
            }
            //[
            if(Obj_GetY(obj5)<GetClipMinY){
                Obj_SetY(obj5, GetClipMinY*2 - Obj_GetY(obj5));
                Obj_SetAngle(obj5, 360 - Obj_GetAngle(obj5));
            }
            //[
            if(Obj_GetY(obj5)>GetClipMaxY){
                Obj_SetY(obj5, GetClipMaxY*2 - Obj_GetY(obj5));
                Obj_SetAngle(obj5, 360 - Obj_GetAngle(obj5));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

   task CreateReflectShot6(let x, let y, speed,
                 let angle, graphic6, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj6, x, y);
        Obj_SetSpeed(obj6, speed);
        Obj_SetAngle(obj6, angle);
        ObjShot_SetGraphic(obj6, graphic6);
        ObjShot_SetDelay(obj6, delay);
	ObjShot_SetBombResist(obj6, true);
        

        while(!Obj_BeDeleted(obj)) {
            //[
            if(Obj_GetX(obj6)<GetClipMinX){
                Obj_SetX(obj6, GetClipMinX*2 - Obj_GetX(obj6));
                Obj_SetAngle(obj6, 180 - Obj_GetAngle(obj6));
            }
            //E[
            if(Obj_GetX(obj6)>GetClipMaxX){
                Obj_SetX(obj6, GetClipMaxX*2 - Obj_GetX(obj6));
                Obj_SetAngle(obj6, 180 - Obj_GetAngle(obj6));
            }
            //[
            if(Obj_GetY(obj6)<GetClipMinY){
                Obj_SetY(obj6, GetClipMinY*2 - Obj_GetY(obj6));
                Obj_SetAngle(obj6, 360 - Obj_GetAngle(obj6));
            }
            //[
            if(Obj_GetY(obj6)>GetClipMaxY){
                Obj_SetY(obj6, GetClipMaxY*2 - Obj_GetY(obj6));
                Obj_SetAngle(obj6, 360 - Obj_GetAngle(obj6));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

   task CreateReflectShot7(let x, let y, speed,
                 let angle, graphic7, let delay, let count) {
        
        //IuWFNge̍쐬
        
        //p[^̐ݒ
        Obj_SetPosition(obj7, x, y);
        Obj_SetSpeed(obj7, speed);
        Obj_SetAngle(obj7, angle);
        ObjShot_SetGraphic(obj7, graphic7);
        ObjShot_SetDelay(obj7, delay);
	ObjShot_SetBombResist(obj7, true);
        

        while(!Obj_BeDeleted(obj)) {
            //[
            if(Obj_GetX(obj7)<GetClipMinX){
                Obj_SetX(obj7, GetClipMinX*2 - Obj_GetX(obj7));
                Obj_SetAngle(obj7, 180 - Obj_GetAngle(obj7));
            }
            //E[
            if(Obj_GetX(obj7)>GetClipMaxX){
                Obj_SetX(obj7, GetClipMaxX*2 - Obj_GetX(obj7));
                Obj_SetAngle(obj7, 180 - Obj_GetAngle(obj7));
            }
            //[
            if(Obj_GetY(obj7)<GetClipMinY){
                Obj_SetY(obj7, GetClipMinY*2 - Obj_GetY(obj7));
                Obj_SetAngle(obj7, 360 - Obj_GetAngle(obj7));
            }
            //[
            if(Obj_GetY(obj7)>GetClipMaxY){
                Obj_SetY(obj7, GetClipMaxY*2 - Obj_GetY(obj7));
                Obj_SetAngle(obj7, 360 - Obj_GetAngle(obj7));
            }
            
        if(count<=0){ break; }
        
            yield;
        }

    }

	task TSub{

	    yield;
	    loop(wIni){ yield; }

	    loop{
	    move;
	    loop(60){ yield; }
	    }
	}

    // ړ
    sub move {
        let wMove = 50;

        moveToPlayer(rand(40, 80), rand(-40, 40), wMove,
                     GetClipMinX + 48, GetClipMinY +  32,
                     GetClipMaxX - 48, GetClipMinY + 128);
	wait(wMove);
    }
    // ȂׂvC[̕Ɉړ
    //   xMove  : x ̈ړʁi̐j
    //   yAdd   : y ̈ړ
    //   frame  : ړɗvt[
    //   left   : ȉA͈
    //   top    :
    //   right  :
    //   bottom :
    function moveToPlayer(xMove, yAdd, frame, left, top, right, bottom) {
        let x;
        let y;

        if(GetPlayerX < GetX) {
            // vC[EɓG΁AG͍ɓ܂B
            x = GetX - xMove;

            // AAG̈̍[ɂ悤ȂAEɓ܂B
            if(x < left) {
                x = GetX + xMove;
            }
        } else {
            // Ȃ΁AG͉Eɓ܂B
            x = GetX + xMove;

            // AAG̈̉E[Eɂ悤ȂAɓ܂B
            if(right < x) {
                x = GetX - xMove;
            }
        }

        // ̈̊Oɍsꍇ́A[Ŏ~߂܂B
        y = GetY + yAdd;
        if(y < top) {
            y = top;
        } else if(bottom < y) {
            y = bottom;
        }

        SetMovePosition02(x, y, frame);
    }
	
    // w t[҂
    function wait(w) {
        loop(w) { yield; }
    }
}